iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
佛心分享-IT 人自學之術

C++探險家系列 第 12

Day 12 字串輸入練習

  • 分享至 

  • xImage
  •  

以下是函式應用篇
第一題(strncat應用):

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(void)
{
    char s1[] =" Hi";
    char s2[10];
    cout<<"what is your name";
    gets(s2);
    strncat(s1,s2,5);
    cout<<s1<<endl;
    return 0;
}

講解此題程式碼:
s1 初始化為 " Hi",而 s2 是一個大小為 10 的空字符數組。程式接著提示用戶輸入名字,並將用戶輸入的字串讀入 s2 中。使用 strncat 函數將 s2 的前 5 個字符附加到 s1 的末尾。最後,程式輸出合併後的 s1 字串。

第二題(strcmp應用):

#include <iostream>
#include <string.h>
using namespace std;
int main(void)
{
    char s1 [] = "string is fun";
    char s2 [] = "string is";
    if(!strcmp (s1,s2))
        cout<<"s1 and s2 are same(by strcmp)\n";
    if(!strncmp (s1,s2,5))
        cout<<"s1 and s2 are same (by strncmp)\n";
      return 0;
}

講解此題程式碼:
首先,使用 strcmp 函數比較兩個字串是否完全相同。由於 s1s2 不完全相同,strcmp 不會顯示任何訊息。接著,使用 strncmp 函數比較兩個字串的前 5 個字符是否相同。因為 s1s2 的前 5 個字符都為 "string",所以 strncmp 會輸出 "s1 and s2 are same (by strncmp)"

第三題(strlen應用):

#include <iostream>
#include <string.h>
using namespace std;
int main(void)
{
    int len;
    char s[] = "string is fun";
    len = strlen(s);
    cout<<"string s is "<<len<<" long\n";
    return 0;
}

講解此題程式碼:
首先,程式初始化字串 s"string is fun"。接著,使用 strlen 函數計算字串的長度並將其存儲在 len 變數中。最後,程式輸出 "string s is 15 long",其中 15 是字串的長度。

第四題(string 物件應用):

#include <iostream>
#include <string>
using namespace std;
int main(void)
{
    string s1;
    string s2("String is fun");
    s1=s2;
    s2=s1+s2;
    cout<<"String1 is: "<<s1<<endl;
    cout<<"String2 is: "<<s2<<endl;
    return 0;
 }

講解此題程式碼:
首先,s2 被初始化為 "String is fun",然後 s1 被賦值為 s2 的內容。接著,將 s1s2 連接後儲存在 s2 中,結果是 "String is funString is fun"。程式最後輸出 s1s2 的內容,顯示 "String1 is: String is fun""String2 is: String is funString is fun"

第五題(size函式應用):

#include <iostream>
#include <string>
using namespace std;
int main (void)
{
string s1;
string s2("String is fun ");
if(s1.empty()){
    cout<<"String is empty"<<endl;
}
cout<<"String2 is "<<s2.size()<<"characters long "<<endl;
return 0;
}

講解此題程式碼:
首先,s1 是一個空的字串。接著,s2 被初始化為 "String is fun "。程式檢查 s1 是否為空,若是,則輸出 "String is empty"。然後,輸出 s2 的長度(字元數),顯示 "String2 is 15 characters long"

第六題綜合練習(去除字串程式):

#include <iostream>
#include <string.h>
using namespace std;
void exclude (char*,char*);
int main (void)
{
    char str1[]="It is an apple";
    char str2[]="an";
    exclude (str1,str2);
    cout<<str1<<endl;
    return 0;
}
void exclude(char *s1,char *s2)
{
    int i,s2_len = strlen(s2);
    for(i=0;i<(int)strlen(s1)-s2_len; i++){
      if(!strncmp (s1+i,s2, s2_len)){
        strcpy (s1+i,s1+i+s2_len);
        i--;
  }
 }
}

講解此題程式碼:
此程式碼定義了一個 exclude 函數,從 str1 中移除所有 str2 的出現。主函數初始化 str1"It is an apple"str2"an",並調用 exclude 函數。exclude 函數逐字符檢查 str1 是否包含 str2,若找到則用後面的字串覆蓋掉 str2 的位置。

!!以上是跟著第一次學C++就上手第二版第九章後半部一起學習的!!
今天的內容比較複雜一點,實作的小練習也比較多。遇到的困難點是需先理解每一個應用才有辦法連著繼續做,而在strcmp那個應用實作中程式一直無法執行所以跳回去原本先去理解之後再跟著書本的步驟一步一步來最後才執行完畢。明天會往前置處理器及結構單元邁進,希望一切順利囉~


上一篇
Day 11 指標延伸題、字串
下一篇
Day 13 前置處理器
系列文
C++探險家30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言